home *** CD-ROM | disk | FTP | other *** search
-
- /* ------------------------------------------------------------ */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <signal.h>
- #include <string.h>
-
- #define EXACT 1 /* locate_node match flags */
- #define INEXACT 2
- #define NUMELEM(a) (sizeof(a)/sizeof((a)[0]))
-
- typedef struct node {
- struct node *pfwd; /* ptr to next node in list */
- struct node *pbwd; /* ptr to prev node in list */
- void (*process)(unsigned); /* function to call */
- unsigned priority; /* function priority */
- } Node;
-
- Node *proot_node; /* start of data list */
- Node *pfree_node = NULL;/* next free node */
-
- Node *get_free_node(void);
- Node *locate_node(unsigned priority, int match);
-
- void add_node(void); /* action functions */
- void help(void);
- void myexit(void);
-
- void proc_cmd(int dummy);
-
- void idle(unsigned); /* process functions */
- void pro1(unsigned);
- void pro2(unsigned);
- void pro3(unsigned);
-
- /* --------------------------------------------------------------
-
- FUNCTION MAIN:
-
- The dummy header node head_node is allocated and initialized in
- the declaration.
-
- A. Register proc_cmd as the handler for the next SIGINT signal.
-
- B. Cycle indefinitely through circular list, processing nodes.
-
- -------------------------------------------------------------- */
-
- main()
- {
- const Node *pnode; /* Node just allocated */
- static Node head_node = {
- &head_node,
- &head_node,
- &idle,
- 0
- };
-
- /*A*/ pnode = proot_node = &head_node;
- if (signal(SIGINT, proc_cmd) == SIG_ERR) {
- fprintf(stderr, "can't register handler\n");
- exit(EXIT_FAILURE);
- }
-
- /*B*/ while (1) {
- (*pnode->process)(pnode->priority);
- pnode = pnode->pfwd;
- }
-
- return(EXIT_SUCCESS);
- }
-
-